Computers are everywhere in today's society. They come in all different varieties and can be found in places such as automobiles, laptops or home personal computers, banks, personal digital assistants, cell phones, and servers. In addition, as computers become more commonplace and software becomes more complex, there is a need for the computing devices to process more data at faster speeds using a smaller package and less power. Newer computing systems often have multiple processors with multiple processing cores running at higher operating frequencies than previous generations of processors, which often results in an increase in processing power for the processor. For example, newer server devices may run a plurality of such multi-core processors.
To take advantage of these multi-processor and multi-core processor systems, an emphasis in parallel computing has arisen. Parallel processing involves the breaking up of tasks into smaller ones and then distributing the tasks amongst the multiple processors and processor cores. The tasks are each completed independently and the results are then combined. This allows for large computational tasks to be completed in an efficient manner.
In order to synchronize these parallel computations, a systemwide time reference is typically used. This systemwide time reference increments indefinitely from when the system is turned on until it shuts down. This systemwide time reference is often referred to a system TICK or STICK and can be utilized by one or more programs to determine real-time. In general, the STICK increments at a constant rate independent of processor or processor core clock frequencies. Thus even a plurality of processors and multi-core processors operating at slightly different clock rates may still perform parallel operations. The STICK may also be utilized by the processors to determine a real-time clock signal to pace the executing applications to real-time.
Most STICK implementations are based on a distributed scheme, with each processor or each processor core individually keeping its own copy of STICK. When a server or cluster is started, each copy of STICK is set at zero and started at approximately the same time. This may be done by broadcasting a signal to all of the processors to start their respective STICK counters over a dedicated wire to a reset pin on each processor. This allows for all of the STICK counters to be approximately equal with the only differences being caused by the individual processor reaction times to the start signal.
In the modern computing world, there is also a constant push to reduce power consumption. The power consumed by a computing system has direct cost associated with powering processors and required components during operation as well as indirect costs such as cooling expenses. The more processors that are running, the higher the cooling costs and increased overall energy consumption.
In many cases, every processor and processor core isn't operating at maximum load, or may be completely idle. In these low load conditions, one ore more processors and processor cores may not even be needed and are thus simply wasting power and generating heat. Ideally, these unused or underused processors and processor cores could be shutdown and restarted as needed. This becomes problematic because once the processor has been shutdown, upon reactivation, the processor no longer has any knowledge of the current system-wide value of STICK and thus cannot synchronize operations with the already running processors. Similar issues arise when a processor or processors are added or hot-swapped during operation of the computing system.
Thus, techniques are described herein to allow for processors to be added, replaced or brought online and to synchronize operations with the previously running processors. This may be done to provide overall cost and power savings over previous processor designs, allow for the easier maintenance of servers, or provide a means for temporarily powering down a processor or processor core for any other reason while maintaining the ability to synchronize the newly activated processor or processor core to the various previously running processor(s).
It is with these and other issues in mind that various aspects of the present disclosure were developed.